package Card;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * Date: 2025-03-03
 * Time: 18:04
 */
public class CardDemo {
    public static final String[] suits = {"♥","♠","♣","♦"};

    public List<Card> GenerateCard() {
        //定义一个牌库，来装这52张牌
        List<Card> listCard = new ArrayList<Card>();

        //先生成数字
        for (int i = 1; i <= 13 ; i++) {
            //再生成图案
            for (int j = 0; j < 4; j++) {
                int num = i;
                String suit = suits[j];
                //生成好了一张牌
                Card card = new Card(suit,num);
                //把牌放进牌库
                listCard.add(card);
            }
        }
        //最后将牌库返回
        return listCard;
    }

    public void suffle(List<Card> cardList) {
        Random random = new Random();

        for (int i = cardList.size()-1; i > 0 ; i--) {
            int j = random.nextInt(i);

            swap(cardList,i,j);
        }
    }

    private void swap(List<Card> cardList ,int i,int j) {
        //实现两个card对象的交换

        //对于数组来说：
        /*
        Card tmp = cardList[i];
        cardList[i] = cardList[j];
        cardList[j] = tmp;
        */

//        但是这里不是数组，而是List,所以，用 List 的方式转换上面的代码：
        Card tmp = cardList.get(i);
        cardList.set(i,cardList.get(j));
        cardList.set(j,tmp);
    }

    public List<List<Card>> play(List<Card> cardList) {
        //如何给每个人分到一张牌呢？
        //使用 顺序表 ，设定为，每人手里有一个牌库，同时，创建一个二维顺序表，将这三个人的牌库存起来
        List<Card> hand1 = new ArrayList<>();
        List<Card> hand2 = new ArrayList<>();
        List<Card> hand3 = new ArrayList<>();

        List<List<Card>> hand = new ArrayList<>();
        hand.add(hand1);
        hand.add(hand2);
        hand.add(hand3);

        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                //每次发牌，都是将 cardList 最顶上的牌发出，也就是下标为 0 的牌，
                Card card = cardList.remove(0);
                hand.get(j).add(card);
            }
        }
        return hand;
    }
}
